package com.lance.answer.question_answer;

import com.alibaba.fastjson.JSONObject;
import com.lance.answer.gui.answer.AnswerObject;
import com.lance.answer.gui.answer.Util;
import com.lance.answer.util.Constant;
import com.lance.answer.util.MD5Utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;


/**
 * 解决话题讨论的问题
 */
@Slf4j
public class QuestionAnswer2 {

    /**
     * 进度表：
     * 6-18 19:55开始测试 公共行政学 行政管理专科
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        //学科中文名
      //  String subjectName = "公共行政学";
        String subjectName = "办公室管理";
        //专业中文名
        String majorName = "行政管理专科20秋";
        //并发开启的浏览器数量
        int sync = 10;
        //是否提交答案
        boolean commit = false;
        //驱动路径
        String driverPath = null;

        //初始化日志配置
        Constant.initLog();
        //开启任务
        start(subjectName, majorName, sync, driverPath, commit);
    }

    public static void start(String subjectName, String majorName, int sync, String driverPath, boolean commit) throws Exception {
        //获取模板路径,通过流的方式获取文件可以避免被打成jar包之后无法获取文件路径的异常


        InputStream inputStream2 = Thread.currentThread().getContextClassLoader().getResourceAsStream(subjectName + "/" + "users/" + majorName + ".user");
        List<String> users = IOUtils.readLines(inputStream2, "utf-8");

        InputStream inputStream3 = Thread.currentThread().getContextClassLoader().getResourceAsStream(subjectName + "/" + subjectName + "-quiz.section");
        List<String> list1 = IOUtils.readLines(inputStream3);
        List<String> paths = new ArrayList<>();

        // ---行政管理(专科) --公共行政学  形考任务1：话题讨论-----
     //   paths.add("http://xinjiang.ouchn.cn/mod/forum/view.php?id=130337");
        // ---行政管理(专科) --公共行政学  形考任务1：话题讨论-----

        // ---行政管理(专科) --政治学原理  形考任务1：话题讨论-----
    //    paths.add("http://xinjiang.ouchn.cn/mod/forum/view.php?id=136214");
        // ---行政管理(专科) --政治学原理  形考任务1：话题讨论-----

        paths.add("http://xinjiang.ouchn.cn/mod/forum/view.php?id=268647");

        // FENGX
//        for (String str : list1) {
//            paths.add(str.split(",")[0].trim());
//        }
        // FENGX

        List<List<String>> group = new ArrayList<>();
        int size = users.size();
        int step = size / sync;
        if (step == 0) {
            group.add(users);
        } else {
            for (int i = 0; i < sync; i++) {
                List<String> list2 = users.subList(step * i, (i + 1) * step);
                group.add(list2);
            }
            group.add(users.subList(step * sync, users.size()));
        }
        for (List<String> batchUser : group) {
            Constant.THREAD_POOL_BATCH.execute(() -> {
                try {
                    for (String user : batchUser) {
                        String[] strs = user.split(",");
                        String userCode = strs[0];
                        String pwd = strs[1].substring(6, 14);
                        pwd = "Ouchn"+pwd;
                        run(paths, null, subjectName, driverPath, userCode, pwd, commit);
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });

        }


    }


    // 管理学基础 2065001457555 19940419
    public static void run(List<String> urlTasks, Map<String, AnswerObject> answers, String subjectName, String driverPath, String userName, String password, boolean commit) throws Exception {
        WebDriver driver = Util.getDriver(driverPath);
        //String url = "http://student.ouchn.cn/";
        String url = "http://passport.ouchn.cn/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3Dstudentspace%26redirect_uri%3Dhttp%253A%252F%252Fstudent.ouchn.cn%252F%2523%252Fsignin-oidc%2523%26response_type%3Did_token%2520token%26scope%3Dopenid%2520profile%2520ouchnuser%2520ouchnstudentspaceapi%2520offline_access%26state%3Dca1cb5d0270b49fdaea508b8a846c457%26nonce%3Dd257df51b0a141ac8ed35b1caf59ef4c";
        driver.get(url);
        Thread.sleep(3000);
        //Util.login(driver, "2065001457555", "19940419");
        Util.login(driver, userName, password);
        Util.switchToFirst(driver);
        Thread.sleep(3000);
        // 形考作业的链接 管理学
        //List<String> urlTasks = Util.getCourseTaskUrl(driver, CourseTypeEnum.BasicManagement.name);
        //List<String> urlTasks = Util.getCourseTaskUrl(subjectCode);

        //chromeDriver.navigate().refresh();
        for (WebElement we : driver.findElements(By.className("media-body"))) {
            Util.switchToFirst(driver);
            // 找到管理学基础
            String mediaTitle = we.findElement(By.className("media-title")).getText();

            if (!mediaTitle.contains(subjectName)) {
                continue;
            }
            //点击进入学习的按钮
            WebElement studyButton = we.findElement(By.cssSelector("button[class='btn bg-primary']"));
            studyButton.click();
            //Util.switchToLast(driver);
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println(urlTasks.toString());
        for (String urlTask : urlTasks) {
            // FIXME 当完成第一份形考任务时，必须提交，否则会弹出 ”是否保存当前页面“消息
            driver.get(urlTask);
            Thread.sleep(2 * 1000);
            // 点击继续作业

            try {
                WebElement doWorkArea = driver.findElement(By.cssSelector("*[class='btn btn-primary']"));
                doWorkArea.click();

                // ---行政管理(专科) --公共行政学  形考任务1：话题讨论-----
             //   String title = "征收公交卡磨损费是不合法的";
              //  String answer = "集成电路卡应用和收费管理办法》中有：“为控制发行费用,对不单独收费的IC卡,可以按照一定的标准向用户收取押金,因丢失、损坏等原因要求补发的,可按照工本费向用户收取费用；实行政府审批的IC卡收费,其收费标准严格按照IC卡工本费核定”的规定,但只是明确可收取押金和补发工本费,并未规定磨损费。公交事业属公益事业、公交卡服务并不能任性而为,收取任何费用都须经过法定程序,确定收取的合法性、标准的合理性,实际上,公交卡收取磨损费本质上是企业自行收取的。其次,执行收取磨损费是加重市民责任。在市民办卡时尽到提醒注意的义务。事实上,公交卡公司并没尽到应尽的法律义务,很多市民只知押金条款不知磨损费条款,无形中限制了市民权利的行使。再次,严重侵犯了消费者财产利益。按性质,公交卡押金是物权法上的质押担保,依据物权法相关规定,公交卡所有权属公交卡公司,押金是市民私人财产。而公交卡公司没有经物价部门批准、在师出无名的情况下,以”磨损费”的形式将公交无形中限制了市民权利的行使。再次,严重侵犯了消费者财产利益。按性质,公交卡押金是物权法上的质押担保,依据物权法相关规定,公交卡所有权属公交卡公司,押金是市民私人财产。而公交卡公司没有经物价部门批准、在师出无名的情况下,以”磨损费”的形式将公交卡押金收入自己腰包,明显是侵犯市民的财产权益。所以说收取公交卡磨损费是不合法的,应当对“磨损费”予以修改,使公交卡尊重公平消费规则。";
                // ---行政管理(专科) --公共行政学  形考任务1：话题讨论-----


                // ---行政管理(专科) --政治学原理  形考任务1：话题讨论-----
            //    String title ="为什么说政治权力要受到制约?";
               //  String answer = "（一）政治权力是一种社会公共力量，又是一种以暴力为核心的物质力量，它具有普遍性、排它性、单向性和至上性的特点，对全社会成员普遍适用，具有绝对的权威性。但是，当它凌驾于社会之上而不受任何监督和制约时，就会异化而产生腐败。因此，只有对它进行有效的监督和制约，才能保证它在正常的轨道上运行，从而达到维护统治秩序、整合社会运行机制的目的。" +
                //        "（二）政治权力是政治主体对一定政治客体的制约能力。它体现在政治主体为实现某种利益或原则的诗句政治过程之中。政治权力在本质上表现特定的力量制约关系，在形式上呈现为特定的公共权力。政治权力不是天生的，它产生于人们之间的社会关系中，它之所以存在就在于权力客体的服从，但是权力客体对于权力主体的服从，有时并不是自愿的，这就引起了权力合法化的问题。任何权" +
               //         "力都离不开合法性的支持，一旦某个政治权力的合法性在公众心中失去了正当性，也就意味着政权出现了危机，所以，政治权力自产生之日起就存在着被认同的问题，只有保证了政治权力的合法性，即被“认同”，才能保证政治权力的顺利实施以及长时间的延续。以权利制约权力，首当其冲的是实行权力的分割制衡原则。之所以必须首先分割权力，是由权力性质决定的。“绝对的权力绝对地导致腐败”，" +
               //         "这是不论社会政治制度差异如何都适用的一个现代政治戒条。权力具有自膨胀的天性，如果不对权力加以分割，这种政治制度就必然成为一种独断专行的制度，绝对的自而不会有真正批评的孤芳自赏的制度，从长期执政效应来看，也相应会成为一种低效率的政治制度。其次，以权力制约权力，需要对监督制约权力的对象加以明确。分割权力作为制约和监督权力的前提，并不必然保证权力受到有效的监督制约。" +
              //          "因为在权力的实际运行中，执掌权力的主体具有自由裁量的空间，他们还是有滥用职权的必然性。必须将执掌权力的人置于有效制约与监督其权力的权力运行体系之中，才能保证他们用公共权力来为公共利益服务。假如仅凭他们依托在自道德信任基础上执掌公共权力的诺言，对他们不加以严格制约与监督，那就绝对不能期望杜绝权钱交易、以权谋私。再次，有效制约与监督权力还必须建立起制度导向与程序优先的制度运行体制。" +
               //         "假如制约与监督权力的动力仅仅来自某些政治高层人物的旨意，或来自某个集团的善良动机，那是不可能有效制约与监督权力的。这是由权力支配意志而不是意志支配权力的权力现代性决定的。历史上曾经有多少意志坚定地想用权力来为大众谋取福利的政治家，到后来演变为滥用权力、甚至以权谋私的堕落分子。这类触目惊心的事例告诉们，除开在" +
               //        "制度上解决权力的制约与监督问题，从而保证从权力的分割开始、到权力的规则运转、再到权力的公共化评估相互贯通，从而将权力的客观化运作与执掌权力者的个人意志和愿望隔离开来，否则就不能想象权力受到有效制约与监督。至于制约与监督权力的程序优先问题，那就更是一个检验政治现代性的指标了。有没有权力运行的分" +
               //         "割制衡制度设计、有没有权力执行的一套客观制度建构、有没有围绕权力执行纠纷建立的裁决机制、有没有对人对事对决策对效用分别设计的制度规章，既是划分传统政治与现代政治的分界线，又是判断权力是否受到有效制约与监督的基本标准。当政治权力作为谋取集体的整体利益和价值的手段的时候，它就能沿着既定的方向运行。" +
                //        "（三）权力的实质是一种具有压迫性的强制力量，而国家权力则可以看做是：一切个人力量的联合，同时这也是一种普遍的强制性力量。然而权力终究是一种社会手段，实施权力的必定是个人或者由个人组成的团体。那么在这种情况下，必定会出现程度不一的权力滥用。而权力滥用的结果往往会导致社会的不稳定。所以在当今社会下，我认为对政治权力而言,权力制约与道德制约都很重要,权力制约是外力作用,道德制约主要是靠掌握权力的主体自身的反省,我认为权力制约更好,道德制约也应起辅助作用。";
                // ---行政管理(专科) --政治学原理  形考任务1：话题讨论-----
              //  String answer = "111111111111";



                String title ="的自我介绍";
                try {
                    WebElement my = driver.findElement(By.cssSelector("span[class='usertext mr-1']"));
                    title = my.getText()+title;
                }catch (Exception e){

                }
                String answer = "我的兴趣爱好很广泛，看书，唱歌，跳舞，弹琴。没事时经常看一会儿书，弹一会儿电子琴，再跳一会舞，唱一会儿歌，很少有闲着的时候。也经常模仿电视里的歌手唱歌，有一次我听见一个歌手唱:“村里有个姑娘叫小芳......”我就试着改成了:“我家有只小猫叫小花.......”其实我最喜欢的还是和小朋友们玩游戏，这可能是我们孩子共同的爱好。" +
                        "我最爱看的书就是漫画书，记得有一次还因为看漫画入迷弄出了个笑话呢。那是三年级的时候，我在看漫画《父与子》，妈妈让我去买酱油，我就应了一声慢悠悠地拿着漫画下楼去小卖店买酱油。我边" +
                        "走边看，到了小卖店老板问:“小姑娘你买什么?”当时正看到父亲正给孩子糖果吃，我就随口说了一" +
                        "句“糖”，老板给了我一袋白糖，我也没细瞅就回家了。回到家里把糖给了妈妈，妈妈一见我心思全在漫画上就知道咋回事了，哭笑不得地说:“你呀，拿你真是没办法......”你们说这件事好笑吧" +
                        "金无足赤，人无完人”我也有一些缺点。比如:爱跟人斤斤计较，一旦自己有理我就不会轻易放过他，如果要是给他人气坏了，我也完蛋了。我的最大缺点就是太抠了，别人一向我借东西或者要吃的，我想都不想张口就说“不!" +
                        "还有，就是学习方面太懒，不爱动脑筋，做题马马虎虎，计算或填空时好把除法看成乘法......" +
                        "这就是我一个乐观开朗，爱说爱笑的小女孩，还有我很喜欢交朋友，你愿意做我的朋友吗?";



                driver.findElement(By.id("id_subject")).sendKeys(title);
                Thread.sleep(2000);
                WebElement iframe = driver.findElement(By.id("id_message_ifr"));
                String js = "document.getElementById('"+iframe.getAttribute("id")+"').contentWindow.document.body.innerText = '"+answer+"'";
                System.err.println(js);
                ((JavascriptExecutor)driver).executeScript(js);
             //   Thread.sleep(200000);
                driver.findElement(By.id("id_submitbutton")).click();
            } catch (Exception e) {
                System.err.println("taskUrl:" + urlTask + "  occur error");
                e.printStackTrace();
                Thread.sleep(2000000);
            }
            //回到试题首页
            TimeUnit.SECONDS.sleep(2);
        }

        Thread.sleep(2000);
        driver.close();
        driver.quit();
    }




}
